package com.example.jwt.controller;

import com.example.jwt.entity.User;
import com.example.jwt.service.LoginService;
import com.example.jwt.util.ResponseResult;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 登录
 */
@RestController
public class LoginController {

    @Resource
    private LoginService loginService;

    /**
     * 密码是明文
     * @param user
     * @return
     */
    @PostMapping("/user/login")
    public ResponseResult login(@RequestBody User user) {
        return loginService.login(user);
    }

    @PostMapping("/logout")
    public ResponseResult logout() {
        return loginService.logout();
    }
    @RequestMapping("/hello1")
    public String hello1() {
        return "hello1";
    }
    @RequestMapping("/hello")
    @PreAuthorize("hasAuthority('admin')")
    public String hello() {
        return "hello";
    }

    @RequestMapping("/test")
    @PreAuthorize("hasAuthority('test')")
    public String test() {
        return "test";
    }

    @RequestMapping("/info")
    @PreAuthorize("hasAnyAuthority('test','admin','system:user:list')")
    public String info() {
        return "info";
    }

    /**
     * hasRole 要求有对应的角色才可以访问，但是它内部会把我们传入的参数拼接上 ROLE_ 后再去比较。
     * 所以这种情况下要用用户对应的权限也要有 ROLE_ 这个前缀才可以
     */
    @RequestMapping("/role")
    @PreAuthorize("hasRole('system:user:list')")
    public String role() {
        return "role";
    }

    /**
     * hasAnyRole 有任意的角色就可以访问，它内部会把我们传入的参数拼接上 ROLE_ 后再去比较。
     * 所以这种情况下要用用户对应的权限也要有 ROLE_ 这个前缀才可以
     */
    @RequestMapping("/anyRole")
    @PreAuthorize("hasAnyRole('admin','system:user:list')")
    public String anyRole() {
        return "anyRole";
    }
}
